RewriteRule不适用于某个特定案例

时间:2016-08-04 16:21:23

标签: apache .htaccess mod-rewrite

我用这个把头撞在墙上。我的htaccess文件中有一个重写规则,适用于所有网址但只有一个。这是

RewriteRule ^([a-zA-Z0-9_-]+)$ content.php?linkid=$1 [L]

完整的htacess

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On

#RewriteRule ^contact-us content.php?linkid=contact-us [L,R]
RewriteRule ^([a-zA-Z0-9_-]+)$ content.php?linkid=$1 [L]
RewriteRule ^news/([a-zA-Z0-9_-]+)/([0-9]+)$ media.php?news=$1&pgNo=$2 [L]
RewriteRule ^news-details/([a-zA-Z0-9_-]+)$ media-detail.php?news_short=$1 [L]
RewriteRule ^services-list/([a-zA-Z0-9_-]+)$ services-list-new.php?services_list=$1 [L]

RewriteRule ^specialities/([a-zA-Z0-9_-]+)/([0-9]+)$ speciality-listing.php?speciality=$1&pgNo=$2 [L]
RewriteRule ^services-details/([a-zA-Z0-9_-]+)$ services.php?speciality_short=$1 [L]
RewriteRule ^treatment-detail/([a-zA-Z0-9_-]+)$ treatment-detail.php?treatment_short=$1 [L]
RewriteRule ^testimonial/([a-zA-Z0-9_-]+)/([0-9]+)$ testimonials.php?testimonial=$1&pgNo=$2 [L]
RewriteRule ^testimonial-detail/([a-zA-Z0-9_-]+)$ testimonial-detail.php?test_short=$1 [L]
RewriteRule ^photo-gallery-detail/([a-zA-Z0-9_-]+)$ photo-gallery-detail.php?photo_short=$1 [L]
RewriteRule ^media/([a-zA-Z0-9_-]+)/([0-9]+)$ media.php?media=$1&pgNo=$2 [L]
RewriteRule ^media-detail/([a-zA-Z0-9_-]+)$ media-detail.php?media_detail=$1 [L]
RewriteRule ^doctor-profile/([a-zA-Z0-9_-]+)$ doctor.php?doc_short=$1 [L]
RewriteRule ^make-an-appointment/([a-zA-Z0-9_-]+)$ make-an-appointmen.php?appointment_id=$1 [L]
RewriteRule ^current-openings/([a-zA-Z0-9_-]+)/([0-9]+)$ current-openings.php?current_opening=$1&pgNo=$2 [L]

</IfModule>

这适用于domain.com/privacy-policy domain.com/content.php?linkid=privacy-policy以及其他一些内容,如推荐,服务,职业等

但它对联系我们不起作用,即domain.com/contact-us

我甚至尝试过上面的注释行的硬编码版本。任何想法的家伙?

修改 我已尝试使用正常工作的网址domain.com/content.php?linkid=contact-us,但domain.com/contact-us错误在此服务器上找不到请求的网址/联系我们。

我还发现了另一个无效的网址,domain.com/media/list/1表示在此服务器上找不到请求的网址/media.html/list/1。 我不知道它从哪里获取media.html。文件结构中有一个名为media.html的文件,所以我将其删除,链接开始工作。但是,联系我们的情况并非如此。

1 个答案:

答案 0 :(得分:0)

将上述评论翻译成答案,因为它可能有助于遇到类似问题的人。

您需要停用MultiViews选项才能使其正常工作。

所以只需更改您的Options行:

Options +FollowSymlinks -MultiViews

Apache's content negotiation module使用选项MultiViewsmod_rewrite之前运行,并使Apache服务器匹配文件扩展名。因此,如果/file是网址,那么Apache将提供/file.html