我在.htaccess中有一堆RewriteRules用于搜索引擎优化目的。样品...
RewriteEngine On
RewriteRule ^signup$ /signup.php
RewriteRule ^account$ /account.php
RewriteRule ^logout$ /logout.php
RewriteRule ^login$ /login.php
RewriteRule ^recent-questions$ /recent.php
RewriteRule ^popular-questions$ /popular.php
...
...
(more similar stuff)
...
...
RewriteRule ^(.*)/([-_~*a-zA-Z0-9]+)\|([0-9]+)(\/)?$ view.php?title=$1&id=$2&%{QUERY_STRING}
RewriteRule ^([-_~*a-zA-Z0-9]+)(\/)?$ categories.php?key=$1
系统位于服务器上的“ask”子文件夹中。
如果我将文件夹映射到http://ask.mydomain.com
,它们都可以正常工作但我不想使用子域,因为我正在添加一个现有的标题&由共享资源的其他人管理的页脚,包含与主www的相对链接。网站。
当我尝试通过http://www.mydomain.com/ask访问该文件夹时,带有连字符的RewriteRules会导致404错误 - 其他错误继续有效。
我已经尝试将连字符转义为 - 和%2D。前者没有区别。后者将我带到一个完全不正确的页面。
答案 0 :(得分:1)
解决方案 - 根本不是连字符。
这是因为MultiViews已启用www。域名,但不是问。域
/ signup将使用MultViews默认行为映射到/signup.php,
但是
/ recent-question未映射到recent.php
根据问题。子域名在.htaccess中重写正确处理的子域名。但MultiViews在www下打破了它。域。
答案 1 :(得分:0)
对我而言,您似乎正在替换错误的群体:
RewriteRule ^(.*)/([-_~*a-zA-Z0-9]+)\|([0-9]+)(\/)?$ view.php?title=$2&id=$3&%{QUERY_STRING}
如果我正确理解您的网址格式为mydomain.com/bla/title|id
,则应该