Concrete5漂亮网址(mod_rewrite)停止工作

时间:2015-10-31 20:50:53

标签: wordpress apache .htaccess mod-rewrite concrete5

我管理两个网站,都运行Concrete5 CMS(v5.6.3.4),它使用.htaccess文件重写URL,以便' index.php'文件被隐藏,网址看起来好多了。类似于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,并且我会重定向到主页。

当我访问/index.php/contact时,联系页面会正确加载。 我也尝试了Wordpress重写规则,并给出了相同的结果。

由于某些Apache,PHP或mod_rewrite模块版本更改或我的托管公司的某些内容,它看起来停止了工作。 这些站点运行在Apache 2.4.17和PHP 5.5.30上。我无法发现mod_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_bybusyne ss 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

3 个答案:

答案 0 :(得分:2)

这与Apache升级有关。 可以通过添加以下内容来解决问题:

定义(&#39; SERVER_PATH_VARIABLE&#39;,&#39; REQUEST_URI&#39;);

到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/

Credits适用于Concrete5论坛的用户sandsoft!

答案 1 :(得分:0)

我运行类似的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

如果它有效,你最终在google上,那么重写就好了。

如果你还没有检查phpinfo(),你应该看到这个,或类似的东西:

Configuration
apache2handler

Loaded Modules  core mod_so http_core [...] mod_alias mod_rewrite [...]

顺便说一下,您提供的数据非常好。

据我所知,Apache和它的模块一起出货,至少是标准模块,虽然我可能是错的,但我相信大多数安装都是这样的,所以它至少非常不可能会是一个问题,但最有可能的是托管公司可能忘记打开mod重写,我已经多次在这里看到过类似的问题。

更新:

我使用firefox live http标头测试了你的网址:

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重定向问题。

答案 2 :(得分:0)

concrete5的旧版(5.6)版本的下一版本不会遇到这个问题:已经使用https://github.com/concrete5/concrete5-legacy/pull/1931修复了