【问题标题】:htaccess URL rewrite page.php?pagehtaccess URL 重写 page.php?page
【发布时间】:2016-06-29 09:04:15
【问题描述】:

我需要一个解决方案。需要重写两个网址:

/page.php?page=onama
/page.php?page=pravila

/onama    
/pravila

我尝试了许多不同的解决方案,但都没有奏效。但是,我确实像我说的那样重写了这些 URL,但是我的页面没有打开,所以我想这一切都在细节中。

提示:

  • page.php 文件位于根目录 - 它充满了 if-else 语句,其中包括 /pages/ 目录中的其他 .php 文件到 page.php 文件中

  • onama.php 和 pravila.php 文件位于 /pages/ 目录中

编辑:

我想我很幸运:) 又试了一次,它奏效了,我不是 .htaccess 规则方面的专家,但这是我的问题的解决方案:

RewriteCond %{QUERY_STRING} ^page=([^&\s]+)$ 重写规则 ^(?:page\.php|)$ /%1? [R=301,L] RewriteCond %{QUERY_STRING} ^page=([^&\s]+)&page=([^&\s]+)$ 重写规则 ^(?:page\.php|)$ /%1/%2? [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\s\/]+)/?$ page.php?page=$1&r [L,QSA]

编辑(新问题)

我正在尝试制定两个重写规则,但无法让它们一起工作。 所以,问题在于规则 1 和规则 2。

当规则 1 在 .htaccess 文件中首先出现时,它就像一个魅力,但后来我遇到了规则 2 的问题 - 给了我一个空白页。

当规则 2 在 .htaccess 文件中排在第一位时,规则 1 不起作用 - 给我 404 页。

在这两种情况下,URL 都是 SEF 并且可以正常工作,但不会显示内容。

我的 htaccess 文件:

# RULE 1 - rewriting "/index.php?view=X" to "/X" 
RewriteEngine On
RewriteCond %{QUERY_STRING} ^view=([^&\s]+)$
RewriteRule ^(?:index\.php|)$ /%1? [R=301,L]

RewriteCond %{QUERY_STRING} ^view=([^&\s]+)$
RewriteRule ^(?:index\.php|)$ /%1/%2? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\s\/]+)/?$ index.php?view=$1&r [L,QSA]

# END OF RULE 1

# RULE 2 - rewriting "page.php?page=X" to "/X"

RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=([^&\s]+)$
RewriteRule ^(?:page\.php|)$ /%1? [R=301,L]

RewriteCond %{QUERY_STRING} ^page=([^&\s]+)&page=([^&\s]+)$
RewriteRule ^(?:page\.php|)$ /%1/%2? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\s\/]+)/?$ page.php?page=$1&r [L,QSA]

# END OF RULE 2

#RULE 3 - rewriting "index.php" to "/"

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

#END OF RULE 3

【问题讨论】:

  • 是的,我想这里的细节很重要。不幸的是,我们几乎没有……
  • 您说您需要将/page.php?page=X 重写为/X 这意味着每当用户导航到/page.php?page=X 时,/X 中的代码就会运行,也许您需要相反?也许您需要重定向?我不确定,但问题的其余部分暗示/X 中没有任何内容,它只是其他内容的预期简写。
  • 这读起来像标准的重写规则。您说“我尝试了许多不同的解决方案,但没有一个有效”,所以我们想知道:您尝试过什么,为什么它对您无效,尽管它对其他人有效?如果不清楚为什么重写对您不起作用,我们为您提供此类规则的第 659365923654956 个示例几乎没有意义。所以请:添加您尝试的规则并解释“不起作用”的实际含义。谢谢。
  • 对不起,不清楚的帖子,我希望它现在有足够的细节。

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:
RewriteEngine On
RewriteRule ^pravila$  "/page.php?page=pravila"
RewriteRule ^onama$    "/page.php?page=onama"

您的 Apache 需要配置为允许在此目录中覆盖以使 .htaccess 工作。

【讨论】:

  • 这不起作用。通常我以前使用这些规则执行此操作并且它有效,但不适用于此脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 2015-12-22
  • 2020-07-02
  • 2014-12-22
  • 1970-01-01
  • 2011-08-30
  • 2011-03-19
相关资源
最近更新 更多