我pipe理两个网站,都运行Concrete5 CMS(v5.6.3.4),它使用.htaccess文件来重写url,所以'index.php'文件被隐藏起来,URL看起来好多了。 类似于WordPress的。 Concrete5添加的.htaccess内容是:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}/index.html !-f RewriteCond %{REQUEST_FILENAME}/index.php !-f RewriteRule . index.php [L] </IfModule>
这用于正常工作,但现在只有主页是可及的。 当我访问其中一个网页时,例如/contact
HTTP 301 Moved Permanently
被返回,并被redirect到主页。
当我访问/index.php/contact
联系人页面正确加载。 我也尝试了Wordpress重写规则,并给出了相同的结果。
它看起来像停止工作,因为一些Apache,PHP或mod_rewrite模块版本更改或由我的托pipe公司。 这些站点运行在Apache 2.4.17和PHP 5.5.30上。 我无法findmod_rewrite模块版本。
我也尝试了Apache FallbackResource /index.php
,似乎适用于子页面,但在这种情况下,主页加载失败。
任何帮助表示赞赏。
更新 :
Apache加载的模块是:
芯mod_authn_file模块mod_authn_dbm mod_authn_anon mod_authn_dbd mod_authn_socache mod_authn_core mod_authz_host mod_authz_groupfile mod_authz_user mod_authz_dbm mod_authz_owner mod_authz_dbd mod_authz_core mod_access_compat mod_auth_basic mod_auth_form mod_auth_digest的mod_allowmethods mod_file_cache提供mod_cache的mod_cache_disk mod_cache_socache mod_socache_shmcb mod_socache_dbm mod_socache_memcache mod_so mod_macro mod_dbd mod_dumpio mod_buffer mod_ratelimit mod_reqtimeout mod_ext_filter mod_request mod_include负责mod_filter mod_substitute mod_sed mod_deflate模块http_core mod_mime mod_log_config mod_log_debug mod_logio mod_env指定mod_expires mod_headers中mod_unique_id mod_setenvif mod_version mod_remoteip mod_proxy mod_proxy_connect mod_proxy_ftp mod_proxy_http mod_proxy_fcgi mod_proxy_scgi mod_proxy_wstunnel mod_proxy_ajp mod_proxy_balancer mod_proxy_express mod_session mod_session_cookie mod_session_dbd mod_slotmem_shm mod_ssl mod_lbmethod_byrequests mod_lbmethod_bytraffic mod_lbmethod_bybusyness mod_lbmethod_heartbeat mod_unixd mod_dav mod_status mod_autoindex mod_info mod_suexec mod_cgi mod_dav_fs mod_dav_lock mod_vhost_alias mod_negotiation mod_dir mod_actions mod_speling mod_userdir mod_alias mod_rewrite mod_php5 mod_ruid2 prefork
这原来与Apache升级有关。 该问题可以通过添加:
define('SERVER_PATH_VARIABLE','REQUEST_URI');
到config / site.php
有关详情,请参阅此处: http : //www.concrete5.org/developers/bugs/5-6-3-4/every-page-returns-page-not-found-except-home-page-with-pretty -u /
学分是为Concrete5论坛用户sandsoft!
我运行一个类似的Apache / PHP版本,唯一的区别是我可以看到的是这样的:
RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
注意index.php前面的/。 尝试一下,然后在你的两个额外的条件,并看看是否有效。
请注意,这是在.htaccess和在我的实际虚拟主机文件在Apache。
你确定mod重写启用? 尝试一个简单的规则作为测试:
RewriteRule ^xxx https://google.com [R=301,L]
重写块之前,保存,重新启动apache(如果它不是.htaccess),然后尝试访问:yoursite.com/xxx
如果它工作,并最终在谷歌,然后重写是好的。
另外检查phpinfo()如果你没有,你应该看到这个,或者类似的东西:
Configuration apache2handler Loaded modulees core mod_so http_core [...] mod_alias mod_rewrite [...]
顺便提一下,您提供的数据非常好。
据我所知,Apache和它的模块一起发布,至少是标准的,虽然我可能是错的,但我相信大部分的安装都是这样的,所以至少不太可能会有问题,但是很可能是托管公司可能忘记打开mod重写,在这里我曾多次看到类似的问题。
更新:
我用firefox live http头测试了你的url:
GET /aanleg/ HTTP/1.1 HTTP/1.1 301 Moved Permanently Location: http://yoursite.com
我第一次写你的重定向工作正常,但它不能正常工作,这是完全错误的,因为应该没有重定向。
既然你运行phpinfo,php也在运行。
你需要显示你的整个htaccess,因为你有一个不好的规则,重定向的网址。
RewriteCond %{HTTP_HOST} . RewriteCond %{HTTP_HOST} !^www\.yoursite\.nl [NC] RewriteRule ^(.*)$ http://www.yoursite.nl/$1 [R=301,L] RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
这就是所有你应该有重写,除非你有特定的,但显然有一个重写规则,是发送一切/这不应该发生。
更新:这个问题几乎可以肯定是一个具体的问题,而不是一个Apache的重定向问题。
下一个版本的legacy5(5.6)版本不会遇到这个问题:已经修复https://github.com/concrete5/concrete5-legacy/pull/1931