0

我正在为一个将博客/新闻页面作为其网站一部分的客户开展一个项目。这一切都很好,但是他们要求他们有自定义永久链接而不是标准问题 php 变量。

我使用了 searchfriendlyurls.com 上的生成器来创建重写规则。我已将此添加到位于网站根文件夹中的 .htaccess 文件中,但是当我单击该链接时,它只会将我发送到我的主机 404 错误页面。有什么建议么。.htaccess 文件如下:

Options -Multiviews

RewriteEngine On
RewriteBase /

# Force search engines to use domain.example.org.uk
RewriteCond %{HTTP_HOST} !^domain\.example\.org\.uk$
RewriteRule ^(.*) http://domain.example.org.uk/$1 [R=301,L]

# Specify search friendly URLs
RewriteRule ^media/news/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

# Generated for free at SearchFriendlyURLs.com

我们欢迎所有的建议

4

2 回答 2

0

我注意到您的 article.php 可能期望numbers通过您的查询article.php 来判断?article_url_year=$1& article_url_month=$2但是你的 RewriteRule RewriteRule ^media/news/([a-z]+)只会匹配字母。

尝试替换这一行:

RewriteRule ^media/news/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

有了这个:

RewriteRule ^media/news/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

看看它是否有效。

此代码仅允许:

  • 所有字母(大写和小写)。
  • 所有数字。
  • 破折号 (-)
于 2012-11-14T01:49:44.180 回答
0

添加另一个正则表达式变体:

RewriteRule ^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

例如对于 URL PATH:/media/news/2012/11/test-article/1

重写日志(如果启用)将显示:

[rid#7f920b4b00a0/initial] (3) [perdir /srv/www/htdocs/] applying pattern '^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$' to uri 'media/news/2012/11/test-article/1'
[rid#7f920b4b00a0/initial] (2) [perdir /srv/www/htdocs/] rewrite 'media/news/2012/11/test-article/1' -> '/media/news/article.php?article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1'
[rid#7f920b4b00a0/initial] (3) split uri=/media/news/article.php?article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1 -> uri=/media/news/article.php, args=article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1
[rid#7f920b4b00a0/initial] (2) [perdir /srv/www/htdocs/] trying to replace prefix /srv/www/htdocs/ with /
[rid#7f920b4b00a0/initial] (1) [perdir /srv/www/htdocs/] internal redirect with /media/news/article.php [INTERNAL REDIRECT]
[rid#7f920bcdda00/initial/redir#1] (3) [perdir /srv/www/htdocs/] strip per-dir prefix: /srv/www/htdocs/media/news/article.php -> media/news/article.php
[rid#7f920bcdda00/initial/redir#1] (3) [perdir /srv/www/htdocs/] applying pattern '^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$' to uri 'media/news/article.php'
[rid#7f920bcdda00/initial/redir#1] (1) [perdir /srv/www/htdocs/] pass through /srv/www/htdocs/media/news/article.php
于 2012-11-14T03:39:57.940 回答